The CBSTR class implements a dynamic unicode null terminated string. Free Basic has a dynamic string data type (STRING) and a fixed length unicode data type (WSTRING), but it lacks a dynamic unicode string. CBSTR behaves as if it was a native data type, working directly with the intrinsic Free Basic string functions and operators.
Include file: CWSTR.INC.
Quirks:
| Name | Description |
|---|---|
| Constructors | Initialize the class with the specified value. |
| Operator * | One * returns the address of the CBSTR buffer. Two ** returns the address of the start of the string data. |
| bptr | Returns the underlying BSTR pointer. |
| sptr | Returns the address of the string data. Same as **. |
| vptr | Frees the underlying BSTR and returns the BSTR pointer. |
| wstr | Returns the string data. Same as **. |
| Operator & | Concatenates strings. |
| Operator += | Appends a string to the CBSTR. |
| Operator &= | Appends a string to the CBSTR. |
| Operator [] | Gets or sets the corresponding unicode integer representation of the character at the specified position. |
| Operator Let | Assigns a string to the CBSTR. It implements the = operator. |
| Operator Cast | Returns a pointer to the CBSTR buffer or the string data. Casting is automatic. You don't have to call this operator. |
| wstr | Returns the string data. Same as **. |
| wchar | Returns the string data as a new unicode string allocated with CoTaskMemAlloc. |
| Utf8 | Converts from UTF8 to Unicode and from Unicode to UTF8. |
| Attach | Attaches a BSTR to the CBSTR class. |
| Detach | Detaches the underlying BSTR from the CBSTR class and returns it as the result of the function. |
| Append | Appends a string to the CBSTR. |
| Clear | Frees the underlying BSTR. |
| Empty | Frees the underlying BSTR. |
| Left | Returns the leftmost substring of the string. Same as LEFT. |
| Right | Returns the rightmost substring of the string. Same as RIGHT. |
| Char | Gets or sets the corresponding unicode integer representation of the character at the specified position. |
| LeftChars | Returns the leftmost substring of the string. Same as Left. |
| MidChars | Returns a substring of the string. Same as Mid. |
| RightChars | Returns the rightmost substring of the string. Same as Right. |
| Val | Converts the string to a floating point number (DOUBLE). |
| ValDouble | Converts the string to a floating point number (DOUBLE). |
| ValInt | Converts the string to a signed 32-bit integer (LONG). |
| ValLong | Converts the string to a signed 32-bit integer (LONG). |
| ValLongInt | Converts the string to a signed 64-bit integer (LONGINT). |
| Value | Converts the string to a floating point number (DOUBLE). |
| ValUInt | Converts the string to a 32.bit unsigned integer (ULONG). |
| ValULong | Converts the string to a 32-bit unsigned integer (ULONG). |
| ValULongInt | Converts the string to a 64-bit unsigned integer (ULONGINT). |
Initialize the class with the specified value.
CONSTRUCTOR CBStr
CONSTRUCTOR CBStr (BYREF wszStr AS CONST WSTRING = "")
CONSTRUCTOR CBStr (BYREF cws AS CWSTR)
CONSTRUCTOR CBStr (BYREF cbs AS CBSTR)
CONSTRUCTOR CBStr (BYREF ansiStr AS STRING, BYVAL nCodePage AS UINT = 0)
CONSTRUCTOR (BYVAL n AS LONGINT)
CONSTRUCTOR (BYVAL n AS DOUBLE)
CONSTRUCTOR (BYREF bstrHandle AS AFX_BSTR = NULL, BYVAL fAttach AS LONG = TRUE)
| Parameter | Description |
|---|---|
| wszStr | A WSTRING. |
| cws | A CWSTR. |
| cbs | A CBSTR. |
| ansiStr | An ansi string or string literal. |
| nCodePage | The code page to be used for ansi to unicode conversions. |
| n | A number. |
| bstrHandle | A handle to a BSTR.. |
| fAttach | TRUE = Attaches the BSTR handle to the class. It will be released when the class is destroyed; therefore, don't free the passed handle. FALSE = The contents of the passed BSTR are copied.. |
For a list of code pages see: Code Page Identifiers
Deferences the CBSTR.
One * returns the address of the underlying BSTR pointer.
Two ** returns the address of the start of the string data.
OPERATOR * (BYREF cbs AS CBSTR) AS AFX_BSTR
Returns the underlying BSTR pointer.
FUNCTION bptr () BYREF AS AFX_BSTR
Returns the address of the CBSTR string data (same as **)
FUNCTION sptr () AS WSTRING PTR
Frees the underlying BSTR and returns the BSTR pointer.
FUNCTION vptr () AS AFX_BSTR PTR
Must be used to pass the underlying BSTR to an OUT BYVAL BSTR PTR parameter. If we pass a CBSTR to a function with an OUT BSTR parameter without first freeing it we will have a memory leak.
Returns the string data. Same as **.
FUNCTION wstr () BYREF AS CONST WSTRING
Concatenates strings.
OPERATOR & (BYREF cbs1 AS CBSTR, BYREF cbs2 AS CBSTR) AS CBSTR
Appends a string to the CBSTR.
OPERATOR += (BYREF wszStr AS CONST WSTRING)
OPERATOR += (BYREF cws AS CWStr)
OPERATOR += (BYREF cbs AS CBStr)
OPERATOR += (BYREF ansiStr AS STRING)
Appends a string to the CBSTR.
OPERATOR &= (BYREF wszStr AS CONST WSTRING)
OPERATOR &= (BYREF cws AS CWStr)
OPERATOR &= (BYREF cbs AS CBStr)
OPERATOR &= (BYREF ansiStr AS STRING)
| Parameter | Description |
|---|---|
| wszStr | A WSTRING. |
| cws | A CWSTR. |
| cbs | A CBSTR. |
| ansiStr | An ansi string or string literal. |
Gets or sets the corresponding unicode integer representation of the character at the specified position. The index parameter is zero based ((0 for the first character, 1 for the second, etc.). This operator must not be used in case of empty string because reference is undefined (inducing runtime error). Otherwise, the user must ensure that the index does not exceed the range "[0, Len(cbs) - 1]". Outside this range, results are undefined.
OPERATOR [] (BYVAL nIndex AS LONG) BYREF AS USHORT
DIM cbs as CBSTR = "1234567890"
print cbs[1]
cbs[1] = ASC("X")
print cbs
Assigns a string to the CBSTR.
OPERATOR LET (BYREF wszStr AS CONST WSTRING)
OPERATOR LET (BYREF cws AS CWStr)
OPERATOR LET (BYREF cbs AS CBStr)
OPERATOR LEY (BYREF ansiStr AS STRING)
OPERATOR LET (BYVAL n AS LONGINT)
OPERATOR LET (BYVAL n AS DOUBLE)
OPERATOR LET (BYREF bstrHandle AS AFX_BSTR)
| Parameter | Description |
|---|---|
| wszStr | A WSTRING. |
| cws | A CWSTR. |
| cbs | A CBSTR. |
| ansiStr | An ansi string or string literal. |
| n | A number. |
| bstrHandle | A handle to a BSTR. Don't free it, because it will be attached. |
Return a pointer to the underlying BSTR or the string data. These operators aren't called directly.
OPERATOR CAST () BYREF AS CONST WSTRING
OPERATOR CAST () AS ANY PTR
Returns the string data as a new unicode string allocated with CoTaskMemAlloc. Useful when we need to pass a pointer to a null terminated wide string to a function or method that will release it. If we pass a WSTRING it will GPF. If the length of the input string is 0, CoTaskMemAlloc allocates a zero-length item and returns a valid pointer to that item. If there is insufficient memory available, CoTaskMemAlloc returns NULL.
FUNCTION wchar () AS WSTRING PTR
Converts from UTF8 to Unicode and from Unicode to UTF8.
PROPERTY Utf8() AS STRING
PROPERTY Utf8 (BYREF utf8String AS STRING)
Attaches a BSTR to the CBSTR class.
SUB Attach (BYVAL pbstrSrc AS AFX_BSTR)
Detaches the underlying BSTR from the CBSTR class and returns it as the result of the function. The returned pointer must be freed by SysFreeString.
FUNCTION Detach () AS AFX_BSTR
This method frees the m_bstr member of the CBSTR class and returns it as the result of the function. Because it no longer belongs to the class, it must be freed by SysFreeString.
Appends a string to the CBSTR.
SUB Append (BYREF wszStr AS CONST WSTRING)
Remark: The string can be a literal or a FB STRING, a WSTRING, a CWSTR or a CBSTR variable.
Frees the underlying BSTR.
SUB Clear
Frees the underlying BSTR.
SUB Empty
Returns the leftmost substring of the string.
FUNCTION Left OVERLOAD (BYREF cws AS CBSTR, BYVAL nChars AS INTEGER) AS CBSTR
| Parameter | Description |
|---|---|
| cbs | The source CBSTR. |
| nChars | The number of characters to return from the source string. |
Returns the rightmost substring of the string.
FUNCTION Right OVERLOAD (BYREF cbs AS CBSTR, BYVAL nChars AS INTEGER) AS CBSTR
| Parameter | Description |
|---|---|
| cbs | The source CBSTR. |
| nChars | The substring length, in characters. |
Gets or sets the corresponding unicode integer representation of the character at the position specified by the nIndex parameter.
PROPERTY Char (BYVAL nIndex AS UINT) AS USHORT
PROPERTY Char (BYVAL nIndex AS UINT, BYVAL nValue AS USHORT)
| Parameter | Description |
|---|---|
| nIndex | The one based index of the character in the string (1 for the first character, 2 for the second, etc.). If nIndex is beyond the current length of the string, a 0 is returned. |
| nValue | The unicode integer representation of the character. |
Returns the leftmost substring of the string.
FUNCTION LeftChars (BYVAL nChars AS LONG) AS CBSTR
| Parameter | Description |
|---|---|
| nChars | The number of characters to return from the source string. |
Returns a substring of the string.
MidChars (BYVAL nStart AS LONG, BYVAL nChars AS LONG = 0) AS CBSTR
| Parameter | Description |
|---|---|
| nStart | The start position in CBSTR of the substring. The first character starts at position 1. |
| nChars | The substring length, in characters. If nChars < 0 or nChars >= length of the CBSTR then all of the remaining characters are returned. |
If CBSTR is empty then the null string ("") is returned. If nStart <= 0 then the null string ("") is returned.
Returns the rightmost substring of the string.
FUNCTION RightChars (BYVAL nChars AS LONG) AS CBSTR
| Parameter | Description |
|---|---|
| nChars | The substring length, in characters. |
Converts the string to a floating point number (DOUBLE).
FUNCTION Val OVERLOAD (BYREF cbs AS CBSTR) AS DOUBLE
| Parameter | Description |
|---|---|
| cbs | The source CBSTR. |
Converts the string to a floating point number (DOUBLE).
FUNCTION ValDouble () AS DOUBLE
Converts the string to a signed 32-bit integer (LONG).
FUNCTION ValInt () AS LONG
Converts the string to a signed 32-bit integer (LONG).
FUNCTION ValLong () AS LONG
Converts the string to a signed 64-bit integer (LONGINT).
FUNCTION ValLongInt () AS LONGINT
Converts the string to a floating point number (DOUBLE).
FUNCTION Value () AS DOUBLE
Converts the string to a 32.bit unsigned integer (ULONG).
FUNCTION ValUInt () AS ULONG
Converts the string to a 32-bit unsigned integer (ULONG).
FUNCTION ValULong () AS ULONG
Converts the string to a 64-bit unsigned integer (ULONGINT).
FUNCTION ValULongInt () AS ULONGINT